home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Enigma Amiga CD / Listati / method.rpl < prev   
Text File  |  1994-12-02  |  3KB  |  107 lines

  1. ( Nuove words RPL per Real 3D:
  2. ( definizione del nuovo metodo di animazione
  3. ( "SET_VELOCITY"
  4. (
  5. ( by Alessandro Tasora, 1994
  6.  
  7. "r3d2:rpl/sys/vectors.rpl" LOAD
  8. "r3d2:rpl/sys/objects.rpl" LOAD
  9. "r3d2:rpl/sys/tags.rpl"    LOAD
  10.  
  11.  
  12. : GetTargets
  13.     0              ( 0 termina la lista
  14.     o2 @ O_GETSUB  ( variabile o2 punta il 1 sub obj
  15.     BEGIN
  16.         DUP IF     ( test, not 0: c'e l'oggetto
  17.             DUP O.wMETHOD + W@ ( fetch wMETHOD field
  18.             NOT IF  ( se zero, target valido
  19.                 DUP
  20.             ENDIF
  21.         ELSE       ( object address = zero,
  22.             DROP
  23.             EXIT
  24.         ENDIF
  25.         O_GETNEXT  ( fetch address del prossimo obj
  26.     AGAIN
  27. ;
  28.  
  29. : GetParameters
  30.     0               ( 0 termina la lista
  31.     o1 @ O_GETSUB   ( variabile o1 punta 1 sub obj
  32.     BEGIN
  33.         DUP IF      ( test, not 0: c'è l'oggetto
  34.             DUP O.wMETHOD + W@ ( fetch wMETHOD field
  35.             NOT IF  ( se zero, target valido
  36.                 DUP
  37.             ENDIF
  38.         ELSE        ( object address = zero,
  39.             DROP
  40.             EXIT
  41.         ENDIF
  42.         O_GETNEXT   ( fetch addr. object successivo
  43.     AGAIN
  44. ;
  45.  
  46. ( Per cercare la distanza fra due punti a caso
  47. ( di due superf. o due "evaluable prim."; se si
  48. ( usano due "offset" la distanza è fissa.
  49.  
  50. : GetRndDist ( aObj1, aObj2, 0; -> Vdistanza )
  51.      DUP NOT IF
  52.      "parametro mancante" ERROR
  53.      ENDIF
  54.   RANDOM RANDOM RANDOM O_EVAL mycog1 V!
  55.      DUP NOT IF
  56.      "parametro2 mancante" ERROR
  57.      ENDIF
  58.   RANDOM RANDOM RANDOM O_EVAL mycog2 V!
  59.   DROP
  60.   mycog1 V@ mycog2 V@ VSUB
  61. ;
  62.  
  63. ( Set_VVEL_tag inserisce il valore vettoriale
  64. ( di velocità nel tag VVEL dell' oggetto
  65.  
  66. VVARIABLE velocità
  67.  
  68. : Set_VVEL_tag       ( aObject, Vvelocity )
  69.     velocità V!
  70.     DUP
  71.     "VVEL" O_FINDTAG DUP
  72.     IF
  73.        T.aVAL + @
  74.        velocità V@
  75.        4 ROLL V!  ( inserisce il valore corretto
  76.     ELSE
  77.        DROP
  78.        "CEND" velocità V@  "VVEL" O_CREATAG DROP
  79.     ENDIF
  80. ;
  81.  
  82. ( SET_VELOCITY
  83. ( Metodo che assegna una data velocità
  84. ( ai targets. La vel. è definita da 2
  85. ( offset, o due eval. prim. By A. Tasora 94
  86.  
  87. VVARIABLE tmpdist
  88.  
  89. : OP_SET_VELOCITY
  90.     GetParameters      ( fetch 2 offset objects
  91.     GetRndDist        ( find distance between them
  92.     tmpdist V!         ( store distance in a variable
  93.                        ( now stack is empty.
  94.     GetTargets
  95.     BEGIN               ( loop through all targets
  96.         DUP
  97.     WHILE
  98.         tmpdist V@      ( fetch distance
  99.         Set_VVEL_tag    ( add the tag, given the aObj
  100.                         ( and the Vvelocity.
  101.         DROP
  102.     REPEAT
  103.     DROP
  104.     1               ( return 1, everything is okay
  105. ;
  106.  
  107. & OP_SET_VELOCITY "SET_VELOCITY" MTH_CREATE DROP